//
//  DLEmoticonPage.swift
//  01 表情键盘
//
//  Created by danli on 15/12/28.
//  Copyright © 2015年 danli. All rights reserved.
//

import Foundation

class DLEmoticonPage: NSObject {

    static let bundlePath = NSBundle.mainBundle().pathForResource("Emoticons", ofType: "bundle")!
    
    
    // MARK: 属性
    // 表情包的名称
    var id:String
    var group_name_cn:String?
    var emoticons:[DLEmoticon] = [DLEmoticon]()
    
//    // MARK: 方法
//    init(dic:[String: AnyObject]){
//        super.init()
//        self.setValuesForKeysWithDictionary(dic)
//    }
    
    init(id:String){
        self.id = id
        super.init()
    }
    
    static var emoticonPages = DLEmoticonPage.loadAllEmoticonPage()
    
    // 加载所有的表情包
    class func loadAllEmoticonPage() -> [DLEmoticonPage]
    {
        // 获取存储表情包地址的plist文件地址
        let dicPath = (bundlePath as NSString).stringByAppendingPathComponent("emoticons.plist")
        
        let emoticonPageInfoDic = NSDictionary(contentsOfFile: dicPath)
        var pages = [DLEmoticonPage]()
        
        // 添加一个“最近”表情包
        let latelyPage = DLEmoticonPage(id: "")
        latelyPage.group_name_cn = "最近"
        //添加空表情
        latelyPage.addEmptyEmoticon()
        pages.append(latelyPage)
        
        if let arr = emoticonPageInfoDic!["packages"] as? [[String: AnyObject]]
        {
            for dic in arr
            {
                // 获取每个表情包的id -- 即表情包所在文件夹名称
                let id = dic["id"] as! String
                
                // 创建表情包
                let emoticonPage = DLEmoticonPage(id: id)
                
                // 加载所有表情
                emoticonPage.loadEmoticon()
                pages.append(emoticonPage)
            }
        }
        return pages
    }
    
//    错误： 在添加的表情已存在表情包的情况下，没有排序
        /// 添加最近使用的表情
    class func addLatelyEmoticon(emoticon:DLEmoticon)
    {
        // 判断这个表情是否是删除按钮和空按钮，是，直接返回
        if emoticon.removeEmoticon
        {
            // 删除按钮
            return
        }
        if emoticon.code == nil && emoticon.imagePath == nil
        {
            // 空按钮
            return
        }
        emoticon.times++
        
        // 获取最近表情包
        let page = emoticonPages[0]
        
        // 取出删除按钮， 不参与排序
        let removeEmoticon = page.emoticons.removeLast()
        
        // 判断如果最近表情包已经有这个表情，则添加表情
        let isContain = page.emoticons.contains(emoticon)
        if !isContain
        {
            // 插入新表情
            page.emoticons.append(emoticon)
            
        }
        
        // 将表情按使用次数降序排序
        page.emoticons.sortInPlace { (emoticon1, emoticon2) -> Bool in
            
            return emoticon1.times > emoticon2.times
        }
        
        print("删除前:\(page.emoticons.count)")
        // 移除最后一个表情, 保持 最近表情包 只有21个表情
        if !isContain
        {
            page.emoticons.removeLast()
        }
        print("删除后:\(page.emoticons.count)")
        
        //插入删除按钮
        page.emoticons.append(removeEmoticon)
        
        emoticonPages[0] = page
        
    }

    // 加载所有表情
    func loadEmoticon()
    {
        // 拼接表情包路径
        let path = (((DLEmoticonPage.bundlePath as NSString).stringByAppendingPathComponent(id)) as NSString).stringByAppendingPathComponent("info.plist")
        
        // 获取表情包的字典数据
        let emoticonPageDic = NSDictionary(contentsOfFile: path)!
        
        group_name_cn = emoticonPageDic["group_name_cn"] as? String
        
        if let emoticonsArr = emoticonPageDic["emoticons"] as? [[String: AnyObject]]
        {
            var index = 0
            for dic in emoticonsArr
            {
                let emoticon = DLEmoticon(id:id, dic: dic)
                emoticons.append(emoticon)
                
                index++
                if index == 20
                {
                    // 添加删除按钮
                    emoticons.append(DLEmoticon(removeEmoticon: true))
                    index = 0
                }
            }
            
            // 当表情包的最后一页不满时，添加空表情
            addEmptyEmoticon()
        }
    }
    
    func addEmptyEmoticon()
    {
        //获取最后一页的表情数
        let count = emoticons.count % 21
        
        // 循环添加count - 20个空表情
        if count > 0 || emoticons.count == 0
        {
            for _ in count..<20
            {
                emoticons.append(DLEmoticon(removeEmoticon: false))
            }
            // 最后一个位置添加删除按钮
            emoticons.append(DLEmoticon(removeEmoticon: true))
        }
        
        
    }
    
    override var description:String
    {
        return ("\n\t表情包模型: \(id), \(group_name_cn), \(emoticons)")
    }
    
}
